package main

import "fmt"
import "strings"

// ==========闭包==========
var globalCounter = 10

// 累加器
func AddUpper() func(int) int {
	return func(x int) int {
		globalCounter += x
		return globalCounter
	}
}

func addUpper() func(int) int {
	var localCounter = 10
	return func(x int) int {
		localCounter += x
		return localCounter
	}
}

// 闭包求和
func addClosure() func(int, int) int {
	return func(a, b int) int {
		return a + b
	}
}

// 请编写一个程序, 要求如下
// 1)编写一个函数makeSuffix(suffix string)可以接收一个文件后缀名(比如.jpg), 并返回一个闭包
// 2)调用闭包, 可以传入一个文件名, 如果该文件名没有指定的后缀(比如.jpg), 则返回文件名.jpg, 如果已有.jpg后缀, 则返回愿文件名
// 3)strings.HasSuffix
func makeSuffix(suffix string) func(string) string {
	return func(fileName string) string {
		if strings.HasSuffix(fileName, suffix) {
			return fileName
		} else {
			return fileName + suffix
		}
	}
}

func main() {
	F := AddUpper()
	fmt.Println(F(1))          // 11
	fmt.Println(F(1))          // 12
	fmt.Println(F(1))          // 13
	fmt.Println(globalCounter) // 13

	f := addUpper()
	fmt.Println(f(1)) // 11
	fmt.Println(f(1)) // 12
	fmt.Println(f(1)) // 13

	add := addClosure()
	fmt.Println(add(1, 2)) // 3
	fmt.Println(add(3, 4)) // 7

	ms := makeSuffix(".txt.read")
	fmt.Println(ms("123"))
	fmt.Println(ms("abd.txt.read"))
}
